/**
 * Description: ADC
 * File: adc.c |Time: 2021-05-17 13:43
 */

#include "adc.h"

void hal_adc_init(void)
{
    // 1. 设置读取ADC转换结果的时钟周期个数
    ADC.CON &= ~(0xF << 10);
    // 2. 设置开启电源后，延时的时钟周期个数
    ADC.CON &= ~(0xF << 6);
    ADC.CON |= 6 << 6;
    // 3. ADC 通道选择
    ADC.CON &= ~(0x7 << 3);
    // 4. 开启ADC电源
    ADC.CON &= ~(0x1 << 2);
    // 5. 设置ADC分频值
    ADC.PRESCALERCON &= ~(0x3FF);
    ADC.PRESCALERCON |= 100;
    // 6. ADC分频使能
    ADC.PRESCALERCON |= 0x1 << 15;

    // ADC 中断使能
    ADC.INTENB |= 0x1;
    // ADC 中断清楚
    ADC.INTCLR |= 0x1;
}

int get_adc_value(void)
{
    // 1. 开启ADC转换
    ADC.CON |= 0x1;
    // 2. 等待读取转换结果
    while(ADC.CON & 0x1);
    // 3. 读取转换结果
    int adc_value = ADC.DAT & 0xFFF;

    return adc_value * 1800 / 4096 * 2;
}
